package com.yidu.t299.service.twj;

import com.yidu.t299.domain.twj.SysUser;
import com.yidu.t299.domain.twj.UserInfo;

import java.util.List;
import java.util.Map;

/**
 * @author twj
 * @version 1.0.0
 */
public interface SysUserBiz {

    /**
     * 登录
     * 1.根据用户提供用户名（用户标识），到数据库中查询相关记录
     * 2.判断查询到的用户是否为null
     * 3.如果为null，表示当前用户提供的用户名有误
     * 4.如果不为null，根据用户提供的密码（用户凭证）比对数据库中存储的密码
     * 5.如果不一致表示用户提供的密码有误
     * 6.如果一致返回UserInfo对象
     */
    UserInfo login(String usrName, String usrPassword);

    /**
     * 根据主键删除用户信息(实际上是修改flag字段的值，不能直接删除信息)
     * @param usrId 用户编号
     * @return 影响的行数(1:成功)
     */
    int deleteByPrimaryKey(Integer usrId);

    /**
     * 根据主键批量删除用户信息(实际上是修改flag字段的值，不能直接删除信息)
     * @param array 用户编号数组
     * @return 影响的行数(1:成功)
     */
    int deleteBatch(Integer[] array);

    /**
     * 添加用户信息
     * @param sysUser 用户对象
     * @return 影响的行数(1:成功)
     */
    void insert(SysUser sysUser);

    /**
     * 根据主键查询用户信息
     * @param usrId 用户编号
     * @return 用户对象
     */
    SysUser selectByPrimaryKey(Integer usrId);


    /**
     * 根据用户名查询
     * 1、注册：用户名查重
     * 2、用户登录（精细化提示使用，先判断用户名，再判断密码）
     * @param usrName 用户名
     * @return 用户对象
     */
    SysUser selectByUsrName(String usrName);


    /**
     * 根据所给属性值来修改其字段值
     * @param sysUser 用户对象
     */
    void update(SysUser sysUser);



    /**
     * 批量查询
     * @param sysUser 用户对象
     * @return 用户对象集合
     */
    List<SysUser> select(SysUser sysUser);

    /**
     * 同步案例中：分页条件查询，我们反馈的是PageInfo对象
     * 但是PageHelper建议尽量不要跨层，以便后期维护。
     *  比如：后期我们通过Mybatis-plus替换mybatis，那么如果跨层，就需要多个地方更改。
     * @param pageNum 页码
     * @param pageSize 每页行数
     * @param sysUser 用户对象
     */
    Map<String, Object> findPage(Integer pageNum, Integer pageSize, SysUser sysUser);
}
